/*
 * @Author: HeAo
 * @Date: 2022-08-08 10:21:22
 * @LastEditTime: 2022-08-08 18:41:30
 * @LastEditors: HeAo
 * @Description: 
 * @FilePath: \JavaScripe\第一天\05-案例.js
 * 别乱动！
 */
// //第一个案例 全局作用域
// function foo() {
//   // 函数里的作用域 是局部作用域
//   //2.2 var a;
//   if (true) {
//     var a = 3;
//     // 1、打印 if里的a
//     console.log("inner", a);
//   }
//   // 2、打印 if中有变量初始化（赋值） 所以触发变量声明提前 再按上下执行 if里的a=3 
//   console.log("outer", a);
// }
// // 执行foo函数
// foo();
// // 3、变量调用 会报错 因为它没有变量初始化 所以不会进行变量声明提前
// console.log(a);

// ---------------------------------------------
// // 第二个案例
// function test() {
//   // 如果一个变量没有被var声明 说明他是一个全局变量
//   message = "hello";
// }
// test();
// console.log(message);
// // 全局变量
// console.log(global);
// // modules.export
// // console.log(this === global);
// ---------------------------------------------
// 第三个案例

function b() {
  // a是全局变量
  a = 10;
  return;
}
var a = 1;
// 执行b函数 
b();
// 此时 a=10 除非var a=1 在执行b()之后
console.log(a);
// ---------------------------------------------
// // 第四个案例
// var a = 1;

// function b() {
//   // function a() 会提前到这 == var a；所以变量声明提前 变成局部函数
//   console.log('------', this);
//   a = 10;
//   return;
//   //a函数声明，提前变量a，将a认为是函数b作用域的变量，具有局部效果 函数会放在首位
//   // 相当于var a；
//   function a() {}
// }
// b();
// // 因为函数b()中是局部变量 所以不会被赋值
// console.log(a);
// // 打印出来的还是1